package com.db.dbdocument.generateDB.common;


import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;
import java.io.*;
import java.sql.*;
import java.util.*;

/**
 * jdbc连接池
 * 参考文档： https://www.cnblogs.com/progor/p/9096463.html
 */
public class JdbcConnect {

    //定义了连接的数据库的路径
    private static String url = "jdbc:mysql://192.168.1.66:3306/oa_jzyc?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true&autoReconnect=true&failOverReadOnly=false";
    //数据库账号
    private static String user = "root";
    //数据库密码
    private static String password = "12#$qwER";


    public static Connection mysqlDb() throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //获取连接 方式一
        Connection conn = DriverManager.getConnection(url,user,password);
        //获取连接 方式二
        //Properties p = new Properties();
        //p.setProperty("user",user);
        //p.setProperty("password",password);
        //DriverManager.getConnection(url,p);

        //获取数据库信息
        //DatabaseMetaData metaData = conn.getMetaData();
        //getDatabaseProductVersion() 数据库版本号 5.7.35-log
        //System.out.println(metaData.getDatabaseProductVersion());

        //执行sql语句 使用Statement执行sql语句
        //Statement statement = conn.createStatement();
        //获取Statement对象后，对于查询类的sql语句使用：executeQuery(sql)，sql是一个字符串sql语句，返回结果是一个结果集【如果获取结果看下面的结果部分】
        //对于更新类(插入、修改、删除、更新)的语句使用：executeUpdate(sql)，sql是一个字符串sql语句，返回结果是一个整数（受影响的行数）
        //String querySql = "select * from pd_integral_record_export_config";
        //ResultSet resultSet = statement.executeQuery(querySql);

        //return statement;

        return conn;
    }

    /**
     * mysql查询条件 select
     */
    public static List<Map<String,Object>> mysqlDbQuery(String sql) throws SQLException, ClassNotFoundException {
        Connection conn = mysqlDb();
        // getCatalog 获取数据库名称 oa_jzyc
        //System.out.println("获取数据库名称---"+conn.getCatalog());
        //System.out.println("获取数据库版本号---"+conn.getMetaData().getDatabaseProductVersion());
        Statement stmt = conn.createStatement();
        ResultSet rs = stmt.executeQuery(sql);
        ResultSetMetaData meta = rs.getMetaData();
        int cot = meta.getColumnCount();

        List<Map<String, Object>> list = new ArrayList();
        while(rs.next()) {
            Map<String, Object> map = new HashMap();
            for(int i = 0; i < cot; i++) {
                map.put(meta.getColumnName(i + 1), rs.getObject(i + 1));
            }
            list.add(map);
        }

        rs.close();
        stmt.close();
        conn.close();
        return list;
    }

    /**
     * mysql修改条件 (插入、修改、删除、更新) insert update delete
     */
    public static int mysqlDbUpdate(String sql) throws SQLException, ClassNotFoundException {
        Connection conn = mysqlDb();
        Statement stmt = conn.createStatement();
        int executeUpdate = stmt.executeUpdate(sql);
        stmt.close();
        conn.close();
        return executeUpdate;
    }



}
